#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "lda.h"

/* NAO ALTERAR ESTE ARQUIVO */

int main() {
   /* ----------------------------------------------------------------------
      Declarações e início para verificação do uso da memória dinâmica.
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */
   
   Imagem *img=NULL;
   Imagem *rotulo=NULL;
   char nome[100];
   int num_pontos, i, col, lin;

   fscanf(stdin,"%s",nome);
   img = le_imagem(nome);	//le imagem em niveis de cinza a qual sera computada a LDA

   if(img!=NULL){
      rotulo = cria_imagem(img->ncols,img->nlins); 	//cria imagem de etiquetas (rotulos)

      if(rotulo!=NULL){
         fscanf(stdin,"%d",&num_pontos);		//le quantidade de pontos marcadores da LDA
         for (i=0;i<num_pontos;i++){					
      	    fscanf(stdin,"%d %d",&col,&lin);		//le indices de marcadores, normalmente (mas nao necessariamente) minimos locais de img
            if(pixel_valido(img, col, lin))				
               rotulo->val[rotulo->lin[lin] + col] = i+1;  		//atribui etiquetas a marcadores na imagem rotulo, em ordem crescente a partir de 1
         }								//indices da imagem rotulo com valor zero nao possuem inicialmente etiqueta.
        
         lda (img, &rotulo);					//chama funcao principal da lda
         imprime_imagem(rotulo, stdout);			//imprime saida (rotulo) e libera memoria
         destroi_imagem(&rotulo);
      }
      destroi_imagem(&img);
   }

   /* --------------------------------------------------------------------- */
   /* Verificação final do uso da memória dinâmica                          */
   /* --------------------------------------------------------------------- */
   info = mallinfo();
   MemDinFinal = info.uordblks;
   if (MemDinInicial!=MemDinFinal)
      printf("\n\nMemória dinâmica não foi totalmente liberada (%d, %d)\n",
	     MemDinInicial,MemDinFinal);
   /* --------------------------------------------------------------------- */
   return 0;
}
